home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/python
-
- # Copyright (c) 2002, Core SDI S.A., Argentina
- # All rights reserved
- #
- # Redistribution and use in source and binary forms, with or without
- # modification, are permitted provided that the following conditions
- # are met:
- #
- # 1. Redistributions of source code must retain the above copyright
- # notice, this list of conditions and the following disclaimer.
- # 2. Redistributions in binary form must reproduce the above copyright
- # notice, this list of conditions and the following disclaimer in the
- # documentation and/or other materials provided with the distribution.
- # 3. Neither name of the Core SDI S.A. nor the names of its contributors
- # may be used to endorse or promote products derived from this software
- # without specific prior written permission.
- #
- # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- #
-
- #
- # mini shell to be used with impacket
- #
-
- import sys
- import string
- from impacket import smb
-
-
- class MiniImpacketShell:
- def __init__(self):
- self.smb = None
- self.tid = None
- self.pwd = ''
- self.share = None
-
- def eval(self, s):
- l = string.split(s, ' ')
- cmd = l[0]
-
- try:
- f = MiniImpacketShell.__dict__[cmd]
- l[0] = self
- f(*l)
- except Exception, e:
- print "exception! %s" % e
-
- def run(self):
- s = raw_input('# ')
- while s:
- if s == 'exit':
- break
- self.eval(s)
- s = raw_input('# ')
-
- def help(self):
- print """
- open {host,port} - opens a SMB connection against the target host/port
- login {username,passwd} - logs into the current SMB connection
- login_hash {username,lmhash,nthash} - logs into the current SMB connection using the password hashes
- logoff - logs off
- shares - list available shares
- use {sharename} - connect to an specific share
- cd {path} - changes the current directory to {path}
- pwd - shows current remote directory
- ls {wildcard} - lists all the files in the current directory
- rm {file} - removes the selected file
- mkdir {dirname} - creates the directory under the current path
- rmdir {dirname} - removes the directory under the current path
- put {filename} - uploads the filename into the current path
- get {filename} - downloads the filename from the current path
- close - closes the current SMB Session
- exit - terminates the server process (and this session)
-
- An empty line finishes the session
- NOTE: the server is not terminated, although it is left unusable
- """
-
- def open(self,host,port):
- self.smb = smb.SMB("*SMBSERVER", host, port)
-
- def login(self,username, password):
- self.smb.login(username, password)
-
- def login_hash(self,username, lmhash, nthash):
- self.smb.login(username, '', lmhash=lmhash, nthash=nthash)
-
- def logoff(self):
- self.smb.logoff()
-
- def shares(self):
- for share in self.smb.list_shared():
- print "%s" % share.get_name()
-
- def use(self,sharename):
- self.share = sharename
- self.tid = self.smb.tree_connect(sharename)
-
- def cd(self, path):
- p = string.replace(path,'/','\\')
- if p[0] == '\\':
- self.pwd = path
- else:
- self.pwd += '/' + path
-
- def pwd(self):
- print self.pwd
-
- def ls(self, wildcard = None):
- if wildcard == None:
- pwd = self.pwd + '/*'
- else:
- pwd = self.pwd + '/' + wildcard
- for f in self.smb.list_path(self.share, pwd):
- print "%s" % f.get_longname()
-
- def rm(self, filename):
- f = self.pwd + '/' + filename
- file = string.replace(f,'/','\\')
- self.smb.remove(self.share, file)
-
- def mkdir(self, path):
- p = self.pwd + '/' + path
- pathname = string.replace(p,'/','\\')
- self.smb.mkdir(self.share,pathname)
-
- def rmdir(self, path):
- p = self.pwd + '/' + path
- pathname = string.replace(p,'/','\\')
- self.smb.rmdir(self.share, pathname)
-
- def put(self, filename):
- fh = open(filename, 'rb')
- f = self.pwd + '/' + filename
- pathname = string.replace(f,'/','\\')
- self.smb.stor_file(self.share, pathname, fh.read)
- fh.close()
-
- def get(self, filename):
- fh = open(filename,'wb')
- f = self.pwd + '/' + filename
- pathname = string.replace(f,'/','\\')
- self.smb.retr_file(self.share, pathname, fh.write)
- fh.close()
-
- def close(self):
- self.smb.close();
-
- def main():
- shell = MiniImpacketShell()
- shell.run()
-
- if __name__ == "__main__":
- main()
-
-